let {Vector3} = require('../math');

const tmpv1 = new Vector3();

/**
 *  根据 顶点normal 归一化为单位球, 然后转换到矩阵上
 *  UV的范围都是[0,1]。
 *  在知道球面坐标x、y，z和半径r以后，球面点对应的纹理坐标就是V=arcsin(z/r)/PI+0.5，U=arctan(y/x)/2/PI
 * @param data:{
    positions: number[],
    normals: number[],
    texCoords: number[],
    indices: number[]
    }
 */
function computeUVs(data) {
    data.texCoords.length = 2 * data.positions.length / 3;
    let normals = data.normals;
    let size = normals.length / 3;
    for (let i = 0; i < size; ++i){
        tmpv1.set(normals[3 * i],normals[3 * i + 1],normals[3 * i + 2]);
        tmpv1.normalize();

        // 将tmpv1转换成一个矩形坐标
        data.texCoords[2 * i] = 0.5 * Math.atan2(tmpv1.y,tmpv1.x) / Math.PI;
        data.texCoords[2 * i + 1] = Math.asin(tmpv1.z) / Math.PI + 0.5;
    }
}

module.exports = computeUVs;
